import { app, BrowserWindow, ipcMain, dialog } from 'electron'
import { electronApp, optimizer } from '@electron-toolkit/utils'

import { EventRouter } from './router/eventRouter'
import { MainFrame } from './frame/mainFrame'
import routes from './router/routes'

app.whenReady().then(() => {
	electronApp.setAppUserModelId('com.electron')

	app.on('browser-window-created', (_, window) => {
		optimizer.watchWindowShortcuts(window)
	})

	// 创建主窗口并打开
	const mainWindow = new MainFrame()
	mainWindow.create()

	// 创建一个事件路由器
	const eventRouter = new EventRouter()
	// 将导入的 api 传递给事件路由器
	eventRouter.addApi('mainWindow', mainWindow);
	eventRouter.addApi('dialog', dialog);
	eventRouter.addApi('app', app);

	// 添加事件路由
	eventRouter.addRoutes(routes)

	// 监听主窗口宽高变化
	mainWindow.on('resized', () => {
		const size = mainWindow.getSize()
		mainWindow.setSizeOnPrivate(size[0], size[1])
	})

	// 渲染进程向主进程通信：主窗口
	ipcMain.handle('renderer-to-main', (_e, data) => {
		// 将渲染进程发送的数据传递给事件路由器（事件路由器会根据 data 中的事件名称执行对应的事件）
		eventRouter.router(data)
	})

	// 渲染进程向主进程通信：下载窗口
	ipcMain.handle('renderer-to-task', (_e, data) => {
		// 将渲染进程发送的数据传递给事件路由器（事件路由器会根据 data 中的事件名称执行对应的事件）
		eventRouter.router(data)
	})

	app.on('activate', () => {
		if (BrowserWindow.getAllWindows().length === 0) mainWindow.create();
	})
})

app.on('window-all-closed', () => {
	if (process.platform !== 'darwin') {
		app.quit()
	}
})